/**
 * 
 */
package com.gwcloud.leetcode.tags.hash;

/**
 * @ClassName   : Leetcode036 
 * @author      : ganwei 
 * @date        : 2020年5月6日
 * @Description : 36. 有效的数独
 */
public class Leetcode0036 {
	/**
	 * -解题思路，通过空间记录某个数字是否访问。
	 */
    public boolean isValidSudoku(char[][] board) {
    	boolean[][] row = new boolean[9][9];
    	boolean[][] col = new boolean[9][9];
    	boolean[][] block = new boolean[9][9];
    	
    	for(int i = 0; i < 9; i++){
    		for(int j = 0; j < 9; j++){
    			if(board[i][j] != '.'){
    				int num = board[i][j]-'1';
    				int blockIndex = (i/3)*3 + j/3;
    				if(row[i][num] || col[j][num] || block[blockIndex][num]){
    					return false;
    				}else{
    					row[i][num] = true;
    					col[j][num] = true;
    					block[blockIndex][num] = true;
    				}
    			}
    		}
    	}
    	
    	return true;
    }
    
    /*
         public boolean isValidSudoku(char[][] board) {
        // 记录某行，某位数字是否已经被摆放
        boolean[][] row = new boolean[9][9];
        // 记录某列，某位数字是否已经被摆放
        boolean[][] col = new boolean[9][9];
        // 记录某 3x3 宫格内，某位数字是否已经被摆放
        boolean[][] block = new boolean[9][9];
        for (int i = 0; i < 9; i++) {
            for (int j = 0; j < 9; j++) {
                if (board[i][j] != '.') {
                    int num = board[i][j] - '1';
                    int blockIndex = i / 3 * 3 + j / 3;
                    if (row[i][num] || col[j][num] || block[blockIndex][num]) {
                        return false;
                    } else {
                        row[i][num] = true;
                        col[j][num] = true;
                        block[blockIndex][num] = true;
                    }
                }
            }
        }
        return true;
    }

     */
    
    public static void main(String[] args){
    	
    }
}
